package com.atguigu.jxc.dao;

import com.atguigu.jxc.entity.Goods;
import com.atguigu.jxc.entity.Unit;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * @description 商品信息
 */
@Repository
public interface GoodsDao {


    String getMaxCode();

  //获取 总记录数
    Long getTotelRows(@Param("codeOrName") String codeOrName, @Param("goodsTypeId") Integer goodsTypeId);
 // 实现分页展示
    List<Goods> listInventory(@Param("page") Integer page,@Param("rows") Integer rows,
                                 @Param("codeOrName") String codeOrName, @Param("goodsTypeId") Integer goodsTypeId);
   // 获取所有的 商品单位
    List<Unit> getUnitList();
  //获取所有的 商品信息
    List<Goods> goodsList(@Param("page") int page,@Param("rows") Integer rows,
                          @Param("goodsName") String goodsName, @Param("goodsTypeId") Integer goodsTypeId);
 // 获取所有的 商品信息
    void save(@Param("goods") Goods goods);
 // 更新 商品的信息
    void update(Long goodsId, Goods goods);
//  根据 商品 id 来进行查询
    Goods getGoodsById(Integer goodsId);
//删除指定商品
    void deleteGoods(Integer goodsId);
// 获取 无存储的 商品
    List<Goods> getNoInventoryQuantityGoodsList(@Param("page") Integer page,@Param("rows") Integer rows,
                                                @Param("codeOrName") String codeOrName);
 //获取总计录数
    Long getTotal(@Param("codeOrName") String nameOrCode);
  //获取 有 库存的 总记录数
    Long getTotalHasInventoryQuantity(@Param("codeOrName") String nameOrCode);
  //获取 有库存的 商品
    List<Goods> getHasInventoryQuantity(@Param("page") int page, @Param("rows") Integer rows, @Param("codeOrName") String nameOrCode);
 //修改库存和 价格
    void updateInventoryQuantityOrPurchase(@Param("goodsId") Integer goodsId, @Param("inventoryQuantity") Integer inventoryQuantity, @Param("purchasingPrice") double purchasingPrice);
 // 修修改库存
    void deleteGoodStock(Integer goodsId);
// 获取 库存数量 小于 最小库存的 商品
    List<Goods> listAlarm();
}
